{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import warnings\n",
    "%matplotlib inline\n",
    "\n",
    "#Data import\n",
    "data_training_FD2 = pd.read_csv('train_FD002.txt',sep=\" \", header=None)\n",
    "data_training_FD2.head()\n",
    "engine_cycle = ['engine_id','cycle']\n",
    "settings = ['setting1','setting2','setting3']\n",
    "sensors = ['s%s'%i for i in range(1,22)]\n",
    "nan_cols = ['NaN1','NaN2']\n",
    "data_training_FD2.columns = engine_cycle + settings + sensors + nan_cols\n",
    "data_training_FD2 = data_training_FD2.drop(['NaN1','NaN2'],axis=1)\n",
    "\n",
    "#RUL\n",
    "RULtraining = []\n",
    "for unit in range(1,data_training_FD2['engine_id'].unique().shape[0]):\n",
    "    RULtraining.append(data_training_FD2[data_training_FD2['engine_id'] == unit]['cycle'].max())\n",
    "\n",
    "#Set a look-back time range to train the model\n",
    "dt = 20\n",
    "\n",
    "#Load training data\n",
    "Xtraining_to_testing = np.load('Xtraining_to_testing_dt_20.npy')\n",
    "Ytraining_to_testing = np.load('Ytraining_to_testing_dt_20.npy')\n",
    "engines_training_to_testing = np.load('engines_training_to_testing_dt_20.npy')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "#Import modules\n",
    "import keras\n",
    "from keras.models import Sequential\n",
    "from keras.layers import LSTM\n",
    "from keras.layers import Dense\n",
    "\n",
    "#Import trained model\n",
    "from keras.models import load_model\n",
    "model = load_model('model_dt_20.h5')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<keras.models.Sequential at 0x1291f5150>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "#Model evaluation\n",
    "engines_to_check = [1,3,5,7,8,9]\n",
    "\n",
    "prediction, real = [], []\n",
    "for engine in engines_to_check:\n",
    "    if type(engines_training_to_testing) == list:\n",
    "        location = engines_training_to_testing.index(engine)\n",
    "    else:\n",
    "        location = engines_training_to_testing.tolist().index(engine)\n",
    "    Xtest_engine = Xtraining_to_testing[location]\n",
    "    prediction_engine = model.predict(Xtest_engine)\n",
    "    prediction.append(prediction_engine.reshape(prediction_engine.shape[0]))\n",
    "    real.append(Ytraining_to_testing[location])\n",
    "\n",
    "#iNormalization\n",
    "time_of_event_max = 378.0\n",
    "for index in range(len(real)): # for every engine\n",
    "    prediction[index] = prediction[index]*time_of_event_max\n",
    "    real[index] = real[index]*time_of_event_max"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "# put this function in util.py or generate visualization.py\n",
    "def plot_RUL(engine, X, engines_to_check, prediction, real, RULtraining, dt):\n",
    "    plt.figure(figsize=(12,3))\n",
    "    location = engines_to_check.index(engine)\n",
    "    Yprediction = prediction[location]\n",
    "    cycle = X[X['engine_id']==engine].cycle[dt-1:]\n",
    "    Yreal = real[location]\n",
    "    AverageRUL = range(0,-len(Yreal),-1) + np.mean(RULtraining) - dt + 1\n",
    "    print cycle[:5] \n",
    "    print AverageRUL[:5]\n",
    "    \n",
    "    plt.plot(cycle,AverageRUL,'k.',label='Average time-to-failure')\n",
    "    plt.plot(cycle,Yreal,'b-',label='True time-to-failure')\n",
    "    plt.plot(cycle,Yprediction,'r-',label='Predicted time-to-failure')\n",
    "    plt.title('Engine: %d' %engine)\n",
    "    plt.xlabel('Cycle',fontsize=12)\n",
    "    plt.legend(loc='upper right')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "19    20\n",
      "20    21\n",
      "21    22\n",
      "22    23\n",
      "23    24\n",
      "Name: cycle, dtype: int64\n",
      "[ 187.34362934  186.34362934  185.34362934  184.34362934  183.34362934]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1311b8b90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_RUL(engine = 1, X = data_training_FD2, engines_to_check = engines_to_check,\n",
    "         prediction = prediction, real = real, RULtraining = RULtraining, dt = dt)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "197.34362934362935"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.mean(RULtraining) - dt + 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
